草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 从 C 代码调用具有复杂参数和复杂返回类型的 C++ 函数

我有一个C++数学库并用Rust编写了一个项目。由于无法直接从Rust调用C++,但可以调用C,因此我决定编写一个从C++到C的标准包装器。除具有复杂参数的函数外,一切都或多或少地按预期工作,其中虚部由于某种原因丢失。下面我提供mwe。export_c++.h#ifdef__cplusplus#includestd::complexfoo(conststd::complexa);#endif#ifdef__cplusplusextern"C"{#endif#includedouble_Complexc_foo(constdouble_Complexa);#ifdef__cplusplu

c - 开关盒奇怪的范围

在查看一些第3方C代码时,我发现了类似的东西:switch(state){case0:if(c=='A'){//openbrace//code...break;//bracenotclosed!case1://code...break;}//closebrace!case2://code...break;}在我审查的代码中,这似乎只是一个拼写错误,但令我惊讶的是它编译没有错误。为什么这个C有效?与在预期位置关闭大括号相比,这段代码的执行效果如何?这在任何情况下都有用吗?编辑:在示例中,我查看了所有中断都存在(如上所述)-但如果在0或1的情况下中断不存在,则答案也可能包括行为。

c++ - GCC 中优先队列的奇怪 shared_ptr 比较器选择

我有一个包含在std::shared_ptr中的类,我想在std::priority_queue的帮助下选择前k个对象.所以,我定义operator并期待一切都会好起来的。但事实并非如此。默认情况下(使用gcc)std::priority_queue使用默认比较器std::shared_ptr,比较地址。但是如果我对std::vector使用std::sort而没有指定比较器我的operator行为是不同的将会被使用。这有点出乎意料且不一致。代码示例:structdocument{floatrank;document(floatrank):rank(rank){}};usingdoc_

c++ - 将 Gravity(一种脚本语言)调用转换为 native C 函数调用

我目前正在研究实现一种更简洁的方法来从Gravity调用nativeC函数脚本语言。到目前为止,最简单的例子是这个:intadd(intlhs,intrhs){returnlhs+rhs;}staticvoidgravity_wrap_add(gravity_vm*vm,gravity_value_t*args,uint32_tnargs,uint32_tretIndex,void*data){intlhs,rhs,rt;//Unwraplhs=VALUE_AS_INT(args[1]);rhs=VALUE_AS_INT(args[2]);//Performcall,capturere

c++ - 如何从多个静态库中创建一个静态库?

我们最近将一个C++项目从VisualStudio6转换到VisualStudio8。一切都很顺利,直到我们编译了一个将所有静态库放入一个大静态库中的项目。默认情况下,在两个版本的项目之间转换后,项目没有做任何事情(没有创建大的静态库,它只是说项目是最新的)。我们通过向项目添加一个虚拟(空)文件找到了一个可行的解决方案(之前在VisualStudio6解决方案中没有其他文件)。一切顺利,我们设法使用新的开发环境(VisualStudio8)编译项目。我的问题是:如果不向项目中添加虚拟文件,还有其他方法可以做到这一点吗?提前感谢您的回复 最佳答案

c++ - 在存储到 sqlite 上的记录时处理字符串中的特殊字符

在下面的代码中,我看到当我的“描述”是这样的:"''",我在更新sqlite记录的描述时遇到问题。我如何处理'字符。谢谢!sql=wxString::Format("UPDATEeventSETevent_description='%s'WHEREid=%d",description.c_str(),event_id);rc=sqlite3_exec((sqlite3*)_theDB,sql.c_str(),NULL,0,&sqlError);OP回答了他自己的问题:checkthisoutFAQweneedtoreplacetheoccurencesof'with''inthestr

c++ - 在结构内部编码结构的安全阵列

我在C++中有以下代码,我需要能够从C#调用它:structInner{doubledata1;doubledata2;};structOuter{doubledata3;SAFEARRAYinnerData;};intWINAPIProcessData(Outer&outer){...}我尝试了以下方法,但没有用我做错了什么?[StructLayoutAttribute(LayoutKind.Sequential)]publicstructInner{publicdoubledata1;publicdoubledata2;}[StructLayoutAttribute(LayoutK

c++ - 如何在可扩展存储引擎(JetBlue)中的 JetUpdate() 之后获取 AutoIncrement 值

在调用JetSetColumns()和JetUpdate()之后,我如何检索任何新分配的自动增量值的值? 最佳答案 当您调用JetUpdate()时,第三个参数是“书签”。JetUpdate()完成后,您可以使用查找书签JetGotoBookmark()-http://msdn.microsoft.com/en-us/library/ms683554(EXCHG.10).aspx 关于c++-如何在可扩展存储引擎(JetBlue)中的JetUpdate()之后获取AutoIncremen

c++ - 使用shared_ptr实现RCU(读取-复制-更新)?

我对用户空间RCU(读取-复制-更新)非常感兴趣,并尝试通过tr1::shared_ptr模拟一个,这是代码,虽然我真的是并发编程的新手,但会有高手帮我review吗?基本思路是,reader调用get_reading_copy()以获得当前protected数据的指针(假设它是第一代,或G1)。writer调用get_updating_copy()以获得G1的拷贝(假设它是G2),并且只允许一个writer进入临界区。更新完成后,writer调用update()进行交换,使m_data_ptr指向G2数据。正在进行的读者和作者现在持有G1的shared_ptr(s),并且读者或作者最

c++ - C/ObjC - 参数大小。使用指针与值

在什么时候我应该在我的函数/方法中传递一个指向数据的指针,而不是仅仅传递值?显然,在某些情况下我希望函数对给定数据进行操作,但如果我只是为了信息/复制目的传递值怎么办?例如,foo作为基本类型:voidsetFoo(intfoo);...intfoo=1;setFoo(foo);现在foo作为一个简单的结构:typedefstruct{intx;inty;}Foo;voidsetFoo(Foofoo);...Foofoo={1,2};setFoo(foo);//ApplecodedoesthiskindofthingwithCGSize,CGPoint...但是如果foo是一个更大的结